package com.longtop.perform.zb.index.web;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.longtop.framework.base.BaseAction;
import com.longtop.framework.security.BaseCheckedException;
import com.longtop.framework.security.SessionObject;
import com.longtop.framework.util.WebUtil;
import com.longtop.intelliweb.action.IActionContext;
import com.longtop.intelliweb.action.IInitContext;
import com.longtop.intelliweb.view.Dataset;
import com.longtop.perform.zb.index.model.TZbIndex;
import com.longtop.perform.zb.index.service.IndexService;

/**
 * 指标管理--定量基础指标--编辑
 * 
 * @author 胡砥峰
 * 
 */
public class IndexDlComplexEditAction extends BaseAction {

	private final static String DATASET_INDEX = "Dataset_Index";

	/**
	 * 系统共用：初始化调用
	 */
	public void init(IInitContext context) {
		super.init(context);
	}

	/**
	 * 本页jsp：初始化业务数据(覆写父类方法)
	 */
	public void thisPageInit(IInitContext context) {

		// 初始化数据
		Dataset dataset = (Dataset) context.getDataset(DATASET_INDEX);

		// 验证数据集对象是否存在
		if (!WebUtil.validateDatasetExist(this, dataset, DATASET_INDEX)) {
			return;
		}

		// 页面参数指标Id
		String indexId = this.getParameter(context, "indexId");

		// 判断是新增 or 编辑
		if (StringUtils.isNotEmpty(indexId)) {
			IndexService indexService = this.getBean(IndexService.BEAN_ID); // 调用Spring的业务逻辑类
			TZbIndex zbIndex = indexService.get(TZbIndex.class, indexId);

			dataset.appendObject(zbIndex); // 将读取出来的 指标对象 加入到dataset
		}
	}
	
	/**
	 * 保存指标
	 * 
	 * @param context
	 */
	public void saveIndex(IActionContext context) {

		Dataset dataset = (Dataset) context.getDataset(DATASET_INDEX); // 获取页面上的dataset的结构

		// 验证数据集是否存在及是否有变化
		if (!WebUtil.validateDatasetChange(this, dataset, DATASET_INDEX)) {
			return;
		}

		IndexService indexService = this.getBean(IndexService.BEAN_ID); // 调用Spring的业务逻辑类

		try {
			// 把dataset转成要删除的主键列表、新增bean及更新bean列表
			Map changeMap = WebUtil.datasetToObjectList(dataset, "indexId", TZbIndex.class);

			// 获得SessionObject对象,得到用户对象
			SessionObject sessionObject = this.getSessionObject(context);

			// 调用业务逻辑层的批量更新方法(在一个事务内实现)
			Integer[] count = indexService.saveIndex(changeMap, sessionObject);

			// 向JSP页面传递操作结果信息
			this.hintInfoMessage(WebUtil.getSubmitSuccessInfo(count[0].intValue(), count[1].intValue(), count[2].intValue()));
		} catch (BaseCheckedException e) {
			// 在界面显示错误信息
			this.hintErrorMessage(e.getMessage());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}